// 第一题
// Object.keys() 方法详解
// 1 查看下面代码的输出是
const obj1 = {
    'a': 'aa',
    'b': 'bb',
    'c': 'cc'
}
Object.keys(obj1);
// ['a', 'b', 'c']


// 2 查看下面代码输出
const obj2 = Object.create({}, {
    getFoo: {
        value: () => this.foo,
        enumerable: false
    }
});
obj2.foo = 2;
console.log('第二：', Object.keys(obj2))// ['foo']



// 3、继承的属性也可以枚举出来
class Parent {
    constructor() {
        this.name = 'parent';
    }
}
class Child extends Parent {
    constructor() {
        super();
        this.age = 20;
    }
}
let instance = new Child();
console.log('继承的属性：', Object.keys(instance));  // ['name', 'age']


// 4、请问下面打印的顺序是什么
const sa = Symbol('a');
const obj3 = {
    5: '5',
    a: 'a',
    1: '1',
    c: 'c',
    3: '3',
    b: 'b',
}
obj3[sa] = 'sa';
console.log('顺序：', Object.keys(obj3))// ['1', '3', '5', 'a', 'c', 'b']

// 结论：
// Number：大于0的整数，进行排序返回
// String: 按照定义的顺序返回
// Symbol: 过滤掉，不反回


// 5 Object.keys(null) && Object.keys(undefined) 报错

// 6 Object.keys(123) => Object.keys(Number(123))  Object.prototype.toString.call(Number(123)) => '[object Number]'
console.log(Object.keys(123))// []


// 7 Object.keys('123') => Object.keys(String('123'))  Object.prototype.toString.call(String('123')) => '[object String]'
console.log(Object.keys('123'))//   ['0', '1', '2']


















